home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
login.zip
/
CRYPT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-02-03
|
2KB
|
77 lines
#include <stdio.h>
char *encrypt(), *decrypt();
#ifdef MAIN
main(argc,argv)
int argc;
char **argv;
{
char *p, *q;
int x;
p=encrypt(argv[1]);
printf("p=[%s]\n", p);
q=decrypt(p);
printf("q=[%s]\n", q);
printf("strcmp(argv[1], q)=%d\n", strcmp(argv[1], q));
}
#endif
char *
encrypt(linebuf)
char *linebuf;
{
int linelen = strlen(linebuf);
char *cp, *dp;
char *buffer;
buffer = (char *)calloc(1, 256);
dp = buffer;
*dp = (' ' + linelen); /* Record length */
++dp;
for(cp = linebuf; cp < &linebuf[linelen]; cp += 3) {
*dp++ = (' ' + ((cp[0] >> 2) & 0x3f));
*dp++ = (' ' + (((cp[0] << 4) & 0x30) | ((cp[1] >> 4) & 0xf)));
*dp++ = (' ' + (((cp[1] << 2) & 0x3c) | ((cp[2] >> 6) & 0x3)));
*dp++ = (' ' + (cp[2] & 0x3f));
}
*dp = '\0';
while ((dp = (char *)strchr(buffer, ':')) != NULL)
*dp = '\01';
return (buffer);
}
char *
decrypt(linebuf)
char *linebuf;
{
int linelen, i;
char *cp, *dp;
char *buffer;
buffer = (char *)calloc(1, 256);
while ((dp = (char *)strchr(linebuf, '\01')) != NULL)
*dp = ':';
linelen = linebuf[0] - ' ';
if(linelen == 0)
return (NULL);
dp = buffer;
for(cp = &linebuf[1];linelen > 0;cp += 4){
for(i=0;i<4;i++)
cp[i] -= ' ';
*dp++ = ((cp[0] << 2) | ((cp[1] >> 4) & 0x3));
if(--linelen > 0)
*dp++ = ((cp[1] << 4) | ((cp[2] >> 2) & 0xf));
if(--linelen > 0)
*dp++ = ((cp[2] << 6) | cp[3]);
linelen--;
}
*dp = '\0';
return (buffer);
}